package com.nuoniu.sibanyun.service.production;

import com.baomidou.mybatisplus.extension.service.IService;
import com.nuoniu.sibanyun.entity.dto.BOMDetailDto;
import com.nuoniu.sibanyun.entity.production.VProductionDispatchMain;
import com.nuoniu.sibanyun.entity.production.VProductionWorkInventoryDetail;
import com.nuoniu.sibanyun.entity.vo.VProductionDispatchMainVo;

import java.math.BigDecimal;
import java.util.List;

/**
 * <p>
 * 生产制造——派工单 服务类
 * </p>
 *
 * @author 小啊刚
 * @since 2021-04-19
 */
public interface IVProductionDispatchMainService extends IService<VProductionDispatchMain> {


    /**
     * 获取编码
     * @return
     */
    String getCode();
    /**
     * 保存 派工单
     * @param productionDispatchMain
     */
    void saveDispatch(VProductionDispatchMain productionDispatchMain);


    /**
     * 获取 派工单 （上一页、下一页、首页 和 尾页）
     * @return
     */
    VProductionDispatchMainVo getOneByCondition(Integer actionType, Long currentId);

    /**
     * 更新 派工单完工数量
     * @param id
     * @param finishInventoryQuantity
     */
    void updateFinishInventoryQuantity(Long id,BigDecimal finishInventoryQuantity);


    /**
     *  * 通过 BOM清单 母件ID 查询尾阶/单阶 需求量（嵌套循环）
     * @author 白强
     * @param inventoryDetails
     * @param multiple   倍率
     * @param motherBomId
     * @param isGetAvailableQuantity 是否计算可用量
     */
    void listLeafDetailByMother(List<VProductionWorkInventoryDetail> inventoryDetails, BigDecimal multiple, Long motherBomId, boolean isGetAvailableQuantity,boolean isSingle);

    /**
     *  * 通过 母件BOM清单ID 查询 需求量
     * @author 白强
     * @param bomDetailDto
     */
    List<VProductionWorkInventoryDetail> listLeafDetailByMother(BOMDetailDto bomDetailDto);

    /**
     * 删除单据
     */
    void deleteById(Long id);

    /**
     * 审核
     * @param id
     * @param status
     */
    void examine(Long id,Integer status);

    /**
     * 获取某个产品明细 已经派遣的最大次数
     * @param workDetailId
     * @return
     */
    int getMaxDispatchTimes(Long workDetailId);

    /**
     * 根据 加工单 明细ID  查询派工信息
     * @param productionWorkDetailId
     * @return
     */
    VProductionDispatchMainVo getByProductionWorkDetailId(Integer productionWorkDetailId);



}
